package com.ruoyi.worker.service.workerSys;

import com.ruoyi.worker.domain.workAttendance.RzScheduleStaffPlan;
import com.ruoyi.worker.domain.workAttendance.dto.AttendanceShift;
import com.ruoyi.worker.domain.workAttendance.RzScheduleTask;
import com.ruoyi.worker.domain.workAttendance.dto.SchedulePlanDTO;
import com.ruoyi.worker.domain.workAttendance.vo.SchedulePlanVO;

import java.text.ParseException;
import java.util.List;
import java.util.Map;

/**
 * 排班任务
 *
 * @author Hush.
 * @since 2021/11/17 14:26
 **/
public interface ISchedulingTask {

    /**
     * 保存任务
     */
    void saveTask(RzScheduleTask task);

    /**
     * 更新任务
     */
    void updateTask(RzScheduleTask task);

    /**
     * 删除任务
     */
    void delTaskByIds(Long[] ids);

    /**
     * 查询任务集合
     */
    List<RzScheduleTask> listTask(RzScheduleTask task);

    /**
     * 获取考勤通用班次信息
     */
    List<AttendanceShift> listAttendanceShift();

    /**
     * 生成排班计划模板
     */
    SchedulePlanDTO generateSchedulingPlanPreviewTemplateData(RzScheduleTask task) throws ParseException;

    /**
     * 处理员工的排班计划
     *
     * @param list 计划排班数据
     * @param task 主表任务
     */
    void dealSchedulingPlanData(List<Map<String, Object>> list, RzScheduleTask task);

    /**
     *获取排班详情
     *
     * @param searchDto:检索条件
     * @return List<SchedulePlanVO>
     * @author Hush.
     * @since 2021/11/23 11:15
     */
    List<SchedulePlanVO> getDetailSchedulingPlan(RzScheduleStaffPlan searchDto) throws ParseException;

    /**
     * 覆盖原排班计划
     *
     * @param list:新排班计划数据
     * @param dto:原考勤主任务
     * @author Hush.
     * @since 2021/11/21 14:50
     * @throws ParseException
     */
    void coverSchedulingPlanData(List<Map<String, Object>> list, RzScheduleTask dto) throws ParseException;

    /**
     * 校验排班任务模板有无日期冲突
     *
     * @param dto : 检索条件
     * @return java.util.List<com.ruoyi.worker.domain.workAttendance.RzScheduleTask>
     * @author Hush.
     * @since 2021/11/22 11:01
     */
    List<RzScheduleTask> checkTaskShiftDate(RzScheduleTask dto);

    /**
     * 处理离职员工排班
     *
     * @param plan:删除条件
     * @return int 删除数量
     * @author Hush.
     * @since 2021/12/21 14:04
     */
    int handleTheSchedulingOfDepartingEmployees(RzScheduleStaffPlan plan);
}
